package com.tsy.server.control.service;

import com.tsy.server.control.model.enums.DroneAuthorityEnum;
import com.tsy.server.control.model.enums.RemoteDebugMethodEnum;
import com.tsy.server.control.model.param.*;
import com.dji.sdk.common.HttpResultResponse;

/**
 * @author sean
 * @version 1.2
 * @date 2022/7/29
 */
public interface IControlService {

    /**
     * 通过指令远程调试机场。
     * @param sn 设备SN
     * @param serviceIdentifier 调试方法
     * @param param 调试参数
     * @return
     */
    HttpResultResponse controlDockDebug(String sn, RemoteDebugMethodEnum serviceIdentifier, RemoteDebugParam param);

    /**
     * 控制无人机飞往目标点。
     * @param sn 设备SN
     * @param param 参数
     * @return
     */
    HttpResultResponse flyToPoint(String sn, FlyToPointParam param);

    /**
     * 结束“飞往目标点”任务。
     * @param sn 设备SN
     * @return
     */
    HttpResultResponse flyToPointStop(String sn);

    /**
     * 处理“飞往目标点”任务的进度通知。
     * @param receiver 数据
     * @param headers 头
     * @return
     */
//    CommonTopicReceiver handleFlyToPointProgress(CommonTopicReceiver receiver, MessageHeaders headers);

    /**
     * 控制无人机起飞。
     * @param sn 设备SN
     * @param param 参数
     * @return
     */
    HttpResultResponse takeoffToPoint(String sn, TakeoffToPointParam param);

    /**
     * 抢占飞控或载荷控制权限。
     * @param sn 设备SN
     * @param authority 权限类型
     * @param param 参数
     * @return
     */
    HttpResultResponse seizeAuthority(String sn, DroneAuthorityEnum authority, DronePayloadParam param);

    /**
     * 控制无人机载荷。
     * @param param 参数
     * @return
     */
    HttpResultResponse payloadCommands(PayloadCommandsParam param) throws Exception;
}
